// 全局变量与初始化加载
var allTabs = ['tab_1','tab_2','tab_3','tab_4','tab_5']; // TAB页全集
var dict = null; // 代码集
loadDictData(); //加载代码集

// 加载字典数据
function loadDictData(){
	DWREngine.setAsync(false);
	var dictcode = ['3','4','5','6','7','8','9','11','12','13','14','15','16','17','18','19'];
	produceHelper.getDictData(dictcode,loadDictCallback);
}

//加载字典数据回调
function loadDictCallback(data){
	dict = eval('(' + data + ')');
	DWREngine.setAsync(true);
}

//从代码集中获取数据
function getDictData(type){
	var result = '';
	dict.each(function(o){
		if(type == o['dicttype']){
			result = o['dictlist'];
		}
	});
	return result;
}

//根据表单、字段、值获取对应名称
function getDictValue(form,column,value){
	var dictForm = Params.getDict()[form];
	if(null == dictForm || undefined == dictForm){
		return value;
	}                                
	var dictType = dictForm[column];//表单具有代码集的所有字段
	if(null == dictType || undefined == dictType){
		return value; // 返回原来值
	}
	var datas = getDictData(dictType);
	for(var i = 0;i < datas.length; i++){
		if(datas[i]['dictcode'] == value){
			return datas[i]['dictname'];
		}
	}
	return value;
}

// 依次加载Tab数据
function loadTabData(tabs){
	// 预先发起首个TAB请求
	var firstTab = tabs.shift();
	var MFormId = Params.getMainForm(firstTab);
	selectMainFormData(MFormId);
	
	// 加载其他TAB
	tabs.each(function(tab){
		var MFormId = Params.getMainForm(tab);
		selectMainFormData(MFormId);
	});
}

//加载主列表数据
function selectMainFormData(formId){
	produceHelper.getObjectListByRefrence(formId,pid,selectDataCallback);
}

//选择附加表数据
function selectAttachFormData(formId,fkid){
	produceHelper.getObjectListByFK(formId,pid,fkid,selectDataCallback);
}

//加载数据回调函数
function selectDataCallback(data){
	var obj = eval('(' + data + ')');
	var array = obj.beans;
	var formId = obj.formid;
	addRows(formId,array);
}

//根据数据表格中插入行
function addRows(formId,array,operator){
	if(array.length == 0){
		return;
	}
	
	//预备处理函数
	var cellFuncs = new Array();
	var radioFunc = function(data){
		return '<input name="s'+formId+'" type="radio" value="'+data.id+'" onchange="selectOneRow(this,\''+formId+'\','+data.id+');" onclick="this.blur();"/>';
	};
	var cells = Params.getCells(formId);
	cellFuncs.push(radioFunc);
	for(var i = 0;i < cells.length;i++){
		var func = function(data){
			var column = cells[index++ % cells.length]; //列名
			var value = data[column]; // 当前值
			var codeValue = null; //代码集类型
			var result = getDictValue(formId,column,value);
			return result;
		};
 	cellFuncs.push(func);
	}
	
	//增加数据
	var index = 0;
	DWRUtil.addRows("t"+formId, array , cellFuncs, {
		cellCreator: function(options){
			var td = document.createElement("td");
			td.className = "tac";
			if(options.cellNum > 0 && options.cellNum <= cells.length){
				var result = getDictValue(formId,cells[(index - 1) % cells.length],options.rowData[cells[(index - 1) % cells.length]]);
				td.title = result;
			}
			return td;
		},
		escapeHtml:false 
	});
	$('#'+formId).find('.table-dotted input:radio:eq(0)').trigger('click').trigger('change');
}

//选中一行
function selectOneRow(radio,formId,selfId){
	if(radio.checked){
		produceHelper.getObjectByPK(formId,selfId,fillFormCallback);
	}
}

//响应值填充FORM
function fillFormCallback(data){
	var obj = eval('(' + data + ')');
	var array = obj.beans;
	var formId = obj.formid;
	var result = array[0];
	
	// 加载附表数据
	var forms = Params.getAttachForm(formId);
	if(null != forms){
		forms.each(function(AttForm){
			clearArea(AttForm);
			selectAttachFormData(AttForm, result.id);
		});
	}
}

// 清空区域
function clearArea(formId){
	DWRUtil.removeAllRows("t"+formId);
	$(':input','#'+formId)
	 .not(':button, :submit, :reset') 
	 .val('')
	 .removeAttr('checked')  
	 .removeAttr('selected');
}

//参数
var Params = {
	// 保存提示
	saveWarn : {
		'syqk' : '实验情况信息',
		'zycy' : '中药成药信息',
		'linchuang' : '临床观察信息'
	},
	// 各表单字典映射
	dict : {
		'syqk' : {
			'sydxlx' : '3'
		},
		'jsff' : {
			'syfflx' : '12',
			'syffmc' : '13'
		},
		'sylxzb' : {
			'zblx' : '6'
		},
		'blfybd' : {
			'geiyaofs' : '15',
			'buliangfyfl' : '17',
			'buliangfyyy' : '18'
		},
		'ylzy' : {
			'ylzylx' : '4',
			'ylzy' : '5',
			'yddlx' : '19'
		},
		'zycy' : {
			'geiyfs' : '15',
			'jixing' : '16'
		},
		'zyzz' : {
			'herbunit' : '14'
		},
		'zblfybd' : {
			'geiyaofs' : '15',
			'buliangfyfl' : '17',
			'buliangfyyy' : '18'
		},
		'zhxcf' :{
			'zufenlx' : '7',
			'tiquff' : '8',
			'fenliff' : '9',
			'zufencdff' : '11'
		},
		'blfyxx' : {
			'bulfylx' : '17'
		},
		'lxzb' : {
			'zblx' : '6'
		},
		'hxcf' : {
			'zufenlx' : '7',
			'tiquff' : '8',
			'fenliff' : '9',
			'zufencdff' : '11'
		}
	},
	// 填充表格字段描述
	cells : { 
		'syqk' : ['sydxlx','sydx'], // 实验情况信息
		'jsff':   ['syfflx','syffmc'], // 技术方法信息
		'ylzy':   ['ylzy','yddlx','yddlxcs','zyjz','blfyjl','dxcw'], // 方剂-中药-组分药理作用信息
	    'sylxzb': ['zblx','zbmc','youxl'],// 疗效指标信息
		'zycy':   ['zycymc','jixing','laiyuan','yfyl','geiyfs','lincsyz','gongnzz','fangjie'], // 中药成药信息
		'zyzz':   ['herbname','herbcount','herbunit'], // 中药组成信息
		'zblfybd': ['yapwcj','zhiliaobz','geiyaofs','yongfyl','bljbxinxi','buliangfyyy','buliangfyfl','buliangfyclff'], // 不良反应报道
		'zhxcf':   ['bianhao','zufenmc','zufenlx','zufenhl','zufencdff','jianbff','tiquff','fenliff','duizhaop'], // 组分-部位-（活性）成分
		'blfybd': ['yapwcj','zhiliaobz','geiyaofs','yongfyl','bljbxinxi','buliangfyyy','buliangfyfl','buliangfyclff'], // 不良反应报道
		'linchuang':  ['yanjff','zhiljb','yanjiucount','yanjiuyy','youxl','zdbz','lxbz'], // 临床观察信息
		'lcdz':   ['groupstr','bingls','dzyw','youxl','bulfy'], // 临床对照信息
		'blfyxx': ['bulfylx','bulfybx','blfyclff'], // 不良反应信息
		'lxzb':   ['zblx','zbmc','youxl'], // 疗效指标信息
		'lhyy':   ['ywmc','memo'], // 联合用药信息
		'hxcf':   ['bianhao','zufenmc','zufenlx','zufenhl','zufencdff','jianbff','tiquff','fenliff','duizhaop'] // 组分-部位-（活性）成分
	},
	// 附加表填充外键
	tableRefrence : {
		'jsff':   ['syid','syqk'], // 技术方法信息
		'ylzy':   ['syid','syqk'], // 方剂-中药-组分药理作用信息
		'sylxzb': ['rid','syqk'], // 方剂-中药-组分药理作用信息
		
		'zyzz':   ['zycyid','zycy'], // 中药组成信息
		'zblfybd':   ['rid','zycy'],
		'zhxcf':   ['rid','zycy'],
		
		'lcdz':   ['lcid','linchuang'], // 临床对照信息
		'blfyxx': ['lcid','linchuang'], // 不良反应信息
		'lxzb':   ['rid','linchuang'], // 疗效指标信息
		'lhyy':   ['lcid','linchuang'] // 联合用药信息
	},
	// 主题药物类型决定打开的TAB
	themeDrugTab : {
		'1' :  ['tab_2','tab_3','tab_5'], //中成药
		'2' :  ['tab_2','tab_3','tab_5'], //方剂
		'3' :  ['tab_2','tab_3','tab_5'], //单味药
		'4' :  ['tab_5'] //活性组分
	},
	// 文献类型决定打开的TAB
	documentTab : {
		'1' :  ['tab_4'], //临床试验
		'2' :  ['tab_3'], //不良反应报道
		'3' :  ['tab_1'], //动物试验
		'4' :  ['tab_1'], //药理
		'5' :  ['tab_1'], //药代
		'6' :  ['tab_1'] //药物化学
	},
	// 主表
	mainTable : ['syqk','zycy','blfybd','linchuang','hxcf'],
	// Tab决定加载数据对应主表
	mainForm : {
		'tab_1' :  'syqk',
		'tab_2' :  'zycy',
		'tab_3' : 'blfybd',
		'tab_4' :  'linchuang',
		'tab_5' :  'hxcf'
	},
	// 主表决定加载数据附表
	attachForm : {
		'syqk' :  ['jsff','sylxzb','ylzy'],
		'zycy' :  ['zyzz','zblfybd','zhxcf'],
		'blfybd' :  null,
		'linchuang' :  ['lcdz','blfyxx','lxzb','lhyy'],
		'hxcf' :  null
	},
	// 上下TAB对照
	cascadeTab : {
		'tab_1' :  'one',
		'tab_2' :  'two',
		'tab_3' :  'three',
		'tab_4' :  'four',
		'tab_5' :  'five'
	},
 	getCells : function(formId){
 		return this.cells[formId];
 	},
 	getTableRefrence : function(formId){
 		return this.tableRefrence[formId];
 	},
 	getTabs : function(themeType,documentType){
 		return allTabs;
 		/*var themeTabs = this.themeDrugTab[themeType];
 		var documentTabs = this.documentTab[documentType];
 		var result = themeTabs.concat(documentTabs).uniquelize().sort();
 		var hiddenTabs = Array.minus(allTabs,result);
 		hiddenTabs.each(function(o){
 			$('#'+o).hide();
 		})*/;
 		return result;
 	},
 	getCascadeTab : function(tabId){
 		return this.cascadeTab[tabId];
 	},
 	getMainTable : function(){
 		return this.mainTable;
 	},
 	getMainForm : function(tabId){
 		return this.mainForm[tabId];
 	},
 	getAttachForm : function(main){
 		return this.attachForm[main];
 	},
 	getDict : function(){
 		return this.dict;
 	}
};
